home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / C / Applications / Moscow ML 1.42 / src / !runtime / signals.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-08-18  |  689 b   |  36 lines  |  [TEXT/R*ch]

  1. #include "alloc.h"
  2. #include "misc.h"
  3. #include "mlvalues.h"
  4. #include "signals.h"
  5. #include "stacks.h"
  6.  
  7. Volatile int signal_is_pending = 0;
  8. int in_blocking_section = 0;
  9. Volatile code_t signal_handler;
  10. Volatile int signal_number;
  11.  
  12. void execute_signal()
  13. {
  14.   if (in_blocking_section) {
  15.     value clos;
  16.     clos = alloc(Closure_wosize, Closure_tag);
  17.     Code_val(clos) = signal_handler;
  18.     Env_val(clos) = Atom(0);
  19.     callback(clos, Val_int(signal_number));
  20.   } else {
  21.     signal_is_pending = 1;
  22.     something_to_do = 1;
  23.   }
  24. }
  25.  
  26. void enter_blocking_section()
  27. {
  28.   in_blocking_section = 1;
  29.   if (signal_is_pending) execute_signal();
  30. }
  31.  
  32. void leave_blocking_section()
  33. {
  34.   in_blocking_section = 0;
  35. }
  36.